Hadoop 中的组件
1.x 版本
HDFS 负责大数据的存储,Common: HDFS和MR共有的常用的工具包模块,MapReduce: 负责计算,负责计算资源的申请的调度!
2.x 版本
HDFS(框架):负责大数据的存储
YARN(框架): 负责大数据的资源调度
MR(编程模型): 使用 Hadoop制定的 编程要求,编写程序,完成大数据的计算!
区别
1.x 和2.x 的区别是将资源调度和管理进行分离!由统一的资源调度平台 YARN 进行大数据计算资源的调度!提升了Hadoop的通用性!Hadoop搭建的集群中的计算资源,不仅可以运行Hadoop中的MR程序!也可以运行其他计算框架的程序!在hadoop不久之后,由于MR的低效性,出现了许多更为高效的计算框架!例如: Tez,Storm, Spark,Flink
HDFS
负责大数据的存储,包含以下进程:
- Namenode (必须存在,且1个): 负责文件,名称等元数据(属性信息-文件名,大小,文件切分了多少块(block),创建和修改时间等)的存储!Namenode 主要是接受客户端的请求,接受DN的请求!向DN分配任务!
- Datanode (必须存在,可以N个): 负责文件中数据的存储!主要负责接受NM分配的任务!负责数据块(block) 的管理(读,写)。
- SecondaryNamenode (不一定存在,可以是N个): 负责辅助 NameNode工作!
HDFS 的运行模式有两种,一种是本地,另一种是分布式。可以在 core-default.xml 中进行配置,如果是 fs.defaultFS=file:///(默认) 那么就是本地模式,如果是 fs.defaultFS=hdfs:// 那么就是分布式模式。
MapReduce
MapReduce(编程规范): 程序中有 Mapper (简单处理)和 Reducer (合并)。遵循MapReduce的编程规范,编写的程序,打包后,称为一个 Job(任务),Job 需要提交到 YARN上,向 YARN 申请计算资源,运行Job中的Task(进程),Job 会先创建一个进程 MRAppMaster(mapreduce 应用管理者),由 MRAppMaster 向 YARN 申请,MRAppMaster 负责监控 Job中各个Task运行情况,进行容错管理!
MapReduce 也有两种运行模式。如果配置是 mapreduce.framework.name=local(默认)那么是本地运行,如果是 mapreduce.framework.name=yarn,那么就是在 yarn 上运行。
YARN
YARN负责集群中所有计算资源的管理和调度!常见进程:
ResourceManager (1个): 负责整个集群所有资源的管理!主要负责接受客户端的提交 Job 的请求!负责向NM分配任务!负责接受NM上报的信息!
NodeManager (N个): 负责单台计算机所有资源的管理!负责和 RM进行通信,上报本机中的可用资源!负责领取 RM 分配的任务!负责为 Job 中的每个 Task 分配计算资源!
为了防止当前Task在使用这些资源期间,被其他的task抢占资源!将计算资源,封装到一个Container中,在Container中的资源,会被暂时隔离!无法被其他进程所抢占!当前Task运行结束后,当前Container中的资源会被释放!允许其他task来使用!
Hadoop 的安装
安装 JDK
上传 jdk-8u121-linux-x64.tar.gz 到 /opt/soft 目录,并进行解压到 /opt/module 下。编辑 /etc/profile,在最后添加如下信息
1 | JAVA_HOME=/opt/module/jdk1.8.0_121 |
配置 HOST 映射
在 Hadoop 中启动多种不同类型的进程,例如 NN,DN,RM,NM,这些进程需要进行通信!在通信时,常用主机名进行通信,所以需要配置集群中所有机器的host映射。编辑 /etc/hosts 文件,添加以下记录,hadoop10 是当前机器的主机名。
1 | 192.168.1.10 hadoop10 |
创建并使用普通用户
创建 rexyan 用户
1 | useradd rexyan |
赋予管理员权限, 编辑 /etc/sudoers 文件,在 root 下面添加 rexyan 用户不需要密码登录
1 | root ALL=(ALL) ALL |
将 /opt/module/ /opt/soft/ 两个目录的权限改为 rexyan 用户
1 | sudo chown -R rexyan:rexyan /opt/module/ /opt/soft/ |
关闭防火墙
关闭防火墙,并设置开机不启动
1 | sudo service iptables stop |
安装 Hadoop
将在 linux 编译后的 jar 包上传到 /opt/soft 下, 并解压到 /opt/module 目录下
1 | tar zxvf hadoop-2.7.2.tar.gz -C /opt/module/ |
添加环境变量
1 |
|
执行 hadoop version 验证是否安装成功
1 | hadoop version |
Hadoop 的配置文件
Hadoop 有 4 个默认的配置文件, 在 HADOOP_HOME/share/ 下的 jar 包中
1 | core-default.xml: 设置hadoop最核心的参数! |
用户可以自定义 4 个自定义配置文件
1 | core-site.xml: 用户自定义的hadoop最核心的参数! |
用户自定义的配置文件,可以覆盖默认配置文件中同名的参数的值。Hadoop在启动时,先加载4个默认的配置文件,再加载用户自定义的配置文件,如果用户自定义的配置文中有和4个默认配置文件中门的参数,可以覆盖之前已经加载的值!
在使用 hadoop 命令时可以自定义配置文件的目录: hadoop –config 配置文件的目录,如果没有配置,默认读取 HADOOP_HOME/etc/hadoop 中对应的配置文件。
HDFS 本地模式的使用
HDFS 默认是本地模式的,在 rexyan 用户家目录中新建 hello 文件,并上传到本地的 hdfs
1 | hadoop fs -put /home/rexyan/hello /opt/module/ |
上面的命令的意思是将 /home/rexyan/hello 文件,上传到 hdfs 的 /opt/module/ 路径下
还可以进行文件的下载,例如将 hdfs 上的/opt/module/hello 文件下载到 /tmp/hello 中
1 | hadoop fs -get /opt/module/hello /tmp/hello |
HDFS 分布式模式的使用
修改 /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml 配置文件,配置 HDFS 为分布式模式,并配置 NameNode 的地址和端口信息。并且指定 hadoop 运行时产生的临时文件的存储位置。
1 | <configuration> |
上面将 hadoop 的临时文件改为了 /opt/module/hadoop-2.7.2/data/tmp,需要格式化 namenode,目的的是生成 /opt/module/hadoop-2.7.2/data/tmp目录,在目录下生成其他文件。
1 | hadoop namenode -format |
使用 tree 命令查看 /opt/module/hadoop-2.7.2/data/tmp目录,发现下面已经生成了一些文件
启动 NameNode 和 DataNode, 并使用 jps 命令查看启动状态。如果启动失败,可以在 /opt/module/hadoop-2.7.2/logs 目录下查看失败日志。
1 | hadoop-deamon.sh start namenode |
NameNode 启动之后,可以使用 web 页面来访问,地址就是机器所在的地址 + 50070 端口,即 http://192.168.1.10:50070/ 能访问到以下界面就说明 namenode 没有什么问题了。
namenode 启动完成之后,就可以启动 datanode
1 | hadoop-daemon.sh start datanode |
可以使用 jps 或者网页查询是否启动成功
如果 namenode 和 datanode 都启动成功了,那么就说明 hdfs 的配置没有什么问题了,可以上传一个文件试试
1 | hadoop fs -put hello / |
在网页上也就能看到上传的文件了
现在 NN 和 DN 都在同一台机器,且只有一个 DN 节点,我们称这样的分布式为伪分布式。
MapReduce 本地模式的使用
在 /opt/module/hadoop-2.7.2/share/hadoop/mapreduce 目录下,hadoop 提供了 mapreduce 的示例 jar 包程序。如下命令表示,运行 hadoop-mapreduce-examples-2.7.2.jar 这个 jar 包,并且执行 wordcount 单词统计功能,统计 hdfs 上 / 下面的所有文件,将统计结果存放到 hdfs 的 /wc 中
1 | hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount / /wc |
执行结束后就能看到 wc 结果文件
或者执行 hadoop fs -cat /wc/part-r-0000 命令查看 part-r-0000 是生成目录下的块文件,真正存放数据的地方
1 | hadoop fs -cat /wc/part-r-0000 |
MapReduce 在 Yarn 上的使用
在 yarn 上运行 MapReduce,需要配置 MapReduce 的运行模式为 yarn。复制一个示例的配置文件,并将名字改为 mapred-site.xml。编辑 mapred-site.xml 文件,配置如下内容
1 | cd /opt/module/hadoop-2.7.2/etc/hadoop |
1 | <configuration> |
上面我们配置了在 yarn 上运行 MapReduce,所以我们需要配置和启动 yarn(RM 和 NM)。编辑 yarn-site.xml 配置如下内容。配置文件代表了在 hadoop10 这台机器上运行 yarn 的 ResourceManager 程序,并指定 nodemanager 获取数据的方式。
1 | <configuration> |
启动 RM 和 NM 进程
1 | yarn-daemon.sh start resourcemanager |
还可以通过 yarn 的网页来判断 yarn 是否启动成功 http://192.168.1.10:8088/cluster
启动 yarn 之后,再次提交任务,那么就不在是本地运行了。
1 | hadoop jar hadoop-mapreduce-examples-2.7.2.jar wordcount /hello /wc2 |
查看结果数据